import { defineStore } from "pinia";
import {
  login as userLogin,
  logout as userLogout,
  getUserInfo,
  LoginData,
} from "@/api/user";
import { setToken, clearToken } from "@/utils/auth";
import { removeRouteListener } from "@/utils/route-listener";
import { type UserState } from "./types";
import useAppStore from "../app/index";
import { reactive } from "vue";

const useUserStore = defineStore("user", () => {
  const appStore = useAppStore();

  const userState = reactive<UserState>({
    name: undefined,
    avatar: undefined,
    job: undefined,
    organization: undefined,
    location: undefined,
    email: undefined,
    introduction: undefined,
    personalWebsite: undefined,
    jobName: undefined,
    organizationName: undefined,
    locationName: undefined,
    phone: undefined,
    registrationDate: undefined,
    accountId: undefined,
    certification: undefined,
    role: "",
  });

  return {
    userState,
  };
});
//   state: (): UserState => ({
//     name: undefined,
//     avatar: undefined,
//     job: undefined,
//     organization: undefined,
//     location: undefined,
//     email: undefined,
//     introduction: undefined,
//     personalWebsite: undefined,
//     jobName: undefined,
//     organizationName: undefined,
//     locationName: undefined,
//     phone: undefined,
//     registrationDate: undefined,
//     accountId: undefined,
//     certification: undefined,
//     role: '',
//   }),

//   getters: {
//     userInfo(state: UserState): UserState {
//       return { ...state };
//     },
//   },

//   actions: {
//     switchRoles() {
//       return new Promise((resolve) => {
//         this.role = this.role === 'user' ? 'admin' : 'user';
//         resolve(this.role);
//       });
//     },
//     // Set user's information
//     setInfo(partial: Partial<UserState>) {
//       this.$patch(partial);
//     },

//     // Reset user's information
//     resetInfo() {
//       this.$reset();
//     },

//     // Get user's information
//     async info() {
//       const res = await getUserInfo();

//       this.setInfo(res.data);
//     },

//     // Login
//     async login(loginForm: LoginData) {
//       try {
//         const res = await userLogin(loginForm);
//         setToken(res.data.token);
//       } catch (err) {
//         clearToken();
//         throw err;
//       }
//     },
//     logoutCallBack() {
//       const appStore = useAppStore();
//       this.resetInfo();
//       clearToken();
//       removeRouteListener();
//       appStore.clearServerMenu();
//     },
//     // Logout
//     async logout() {
//       try {
//         await userLogout();
//       } finally {
//         this.logoutCallBack();
//       }
//     },
//   },
// });

export default useUserStore;
